const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const {
  CleanWebpackPlugin
} = require('clean-webpack-plugin');
const webpack = require('webpack');

// 模块热替换(Hot Module Replacement 或 HMR)是 webpack 提供的最有用的功能之一。
// 它允许在运行时更新各种模块，而无需进行完全刷新

module.exports = {
  entry: {
    app: './src/index.js'
  },
  devtool: 'inline-source-map',
  // 告知 webpack-dev-server，在 localhost:8080 下建立服务，将 dist 目录下的文件，作为可访问文件。
  devServer: {
    contentBase: './dist',
    hot: true
  },
  module: {
    rules: [{
      test: /\.css$/,
      use: ['style-loader', 'css-loader']
    }]
  },
  plugins: [
    // 在watch模式下，CleanWebpackPlugin 里的 cleanStaleWebpackAssets 要设置为 false ，防止监听到改变时把没有改变的文件给清除了
    new CleanWebpackPlugin({
      cleanStaleWebpackAssets: false
    }),
    new HtmlWebpackPlugin({
      title: 'Development'
    }),
    new webpack.NamedModulesPlugin(),
    new webpack.HotModuleReplacementPlugin()
  ],
  output: {
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/'
  }
};